QPanda 2教程资源 | 逻辑门以及量子程序时钟周期统计
hi~
继上篇推送的
量子门的有效性
小编再次为大家带来
逻辑门及量子程序时钟周期统计
快快前来get一下吧!
在上一篇文章中,小编为大家介绍了QPanda 2的工具组件:判断量子芯片元数据提供的量子门的有效性。
在元数据提供的量子门信息无法满足量子门有效性的情况下,就无法把任意单门或双门转换为量子芯片元数据支持的量子门。我们可以通过:
SingleGateTypeValidator和DoubleGateTypeValidator两个类来判断量子门有效性。
接下来,我们今天主要讲的是逻辑门以及量子程序时钟周期统计。
逻辑门的统计是指统计量子程序、量子线路、量子循环控制或量子条件控制中所有的量子逻辑门(这里也会将测量门统计进去)个数方法。
QGateCounter类是统计一个量子程序(量子线路、量子循环控制、量子条件控制)中量子逻辑门个数的工具类。我们先用QPanda 2构建一个量子程序:
auto qubits = qAllocMany(4);
auto cbits = cAllocMany(4);
QProg prog;
prog << X(qubits[0])
<< Y(qubits[1])
<< H(qubits[0])
<< RX(qubits[0], 3.14)
<< Measure(qubits[1], cbits[0]);
然后调用QGateCounter类统计量子逻辑门的个数,
QGateCounter t;
t.traversal(prog);
size_t num = t.count(prog);;
我们还可以使用QPanda 2封装的一个接口:
size_t num = getQGateNumber(prog);
注解
统计QCircuit、QWhileProg、QIfProg中量子逻辑门的个数和QProg类似。
1、初始化虚拟机环境:使用init接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特和4个经典寄存器;
2、构建量子程序:构建一个量子线路prog,通过 << 操作符把量子逻辑门插入到prog中;
3、调用量子逻辑门统计接口:调用getQGateNumber量子逻辑门统计接口,就可以得到计算结果了。
#include "Core/QPanda.h"
USING_QPANDA
int main(void)
{
init();auto qubits = qAllocMany(4);
auto cbits = cAllocMany(4);
QProg prog;
prog << X(qubits[0])
<< Y(qubits[1])
<< H(qubits[0])
<< RX(qubits[0], 3.14)
<< Measure(qubits[1], cbits[0]);
size_t num = getQGateNumber(prog);
std::cout << "QGate number: " << num << std::endl;
finalize();
return;
}
运行结果:
QGate number: 5
统计量子程序时钟周期
简介
已知每个量子逻辑门在运行时所需时间的条件下,估算一个量子程序运行所需要的时间。每个量子逻辑门的时间设置在项目的元数据配置文件QPandaConfig.xml中, 如果未设置则会给定一个默认值,单量子门的默认时间为2,双量子门的时间为5。
配置文件可仿照下面设置
<QGate>
<SingleGate>
<Gate time = "2">rx</Gate>
<Gate time = "2">Ry</Gate>
<Gate time = "2">RZ</Gate>
<Gate time = "2">S</Gate>
<Gate time = "2">H</Gate>
<Gate time = "2">X1</Gate>
</SingleGate>
<DoubleGate>
<Gate time = "5">CNOT</Gate>
<Gate time = "5">CZ</Gate>
<Gate time = "5">ISWAP</Gate></DoubleGate>
</QGate>
QProgClockCycle 类是QPanda 2提供的一个统计量子程序时钟周期的工具类,我们先用QPanda 2构建一个量子程序:
auto qubits = qvm->allocateQubits(4);
auto prog = CreateEmptyQProg();
prog << H(qubits[0]) << CNOT(qubits[0], qubits[1])
<< iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4);
然后调用QProgClockCycle类得到量子程序的时钟周期,
QProgClockCycle t(qvm);
t.traversal(prog);
auto time = t.count();
我们还可以使用QPanda 2封装的一个接口:
auto time = getQProgClockCycle(qvm, prog);
1、初始化虚拟机环境:使用init接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特;
2、构建量子程序:构建一个量子线路prog,通过 << 操作符把量子逻辑门插入到prog中;
3、调用统计量子程序时钟周期接口:调用getQProgClockCycle统计量子程序时钟周期接口,就可以得到计算结果了。
#include "Core/QPanda.h"
USING_QPANDA
int main(void)
{
auto qvm = initQuantumMachine();auto qubits = qvm->allocateQubits(4);
auto prog = CreateEmptyQProg();
prog << H(qubits[0]) << CNOT(qubits[0], qubits[1])
<< iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4);
auto time = getQProgClockCycle(qvm, prog);
std::cout << "clockCycle : " << time << std::endl;
qvm->finalize();
delete qvm;
return 0;
}
运行结果:
clockCycle : 14
★以上即为QPanda 2逻辑门以及量子程序时钟周期统计部分的详细内容介绍。
★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)
★PC端学习量子计算请登录learn-quantum.com
★掌上学习请下载"本源溯知APP"
往期精彩回顾
QPanda 2教程资源 | 量子门的有效性及判断方法
QPanda 2教程资源 | 量子比特的测量方法:量子测量和概率测量
模拟量子虚拟机的解决方案(下):单振幅和含噪声量子虚拟机
模拟量子虚拟机的解决方案(上):全振幅和部分振幅量子虚拟机
QPanda 2教程资源 | 构建量子程序、QWhile与QIf的方法
QPanda 2最常用的量子计算模型——量子线路
嗨玩本源QPanda 2,从量子逻辑门实例开始学起!
Origin Q发布国内首款量子软件开发包Q-Panda